package com.alipay.zmdepositdemo.model;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

import java.io.Serializable;

/**
 * 创建芝麻免押订单时必需的入参
 * 1、详细内容可参考接口文档：
 *
 * @see <a
 * href="https://opendocs.alipay.com/open/e2e70da4_alipay.fund.auth.order.app
 * .freeze?pathHash=1002681c&ref=api&scene=3392871eb88945fa977f613f214ea1c6/">
 * alipay.fund.auth.order.app.freeze(线上资金授权冻结接口)</a>
 */
@ApiModel(description = "信用单模型")
public class CreditOrderModel implements Serializable {

    private static final long serialVersionUID = 89765465475L;

    /**
     * 必填：预授权支付产品码
     * 如： PREAUTH_PAY
     */
    @ApiModelProperty(value = "预授权支付产品码", example = "PREAUTH_PAY", required = true)
    private String productCode;

    /**
     * 必填：预授权冻结总金额
     * 如： 100.00
     */
    @ApiModelProperty(value = "预授权冻结总金额", example = "12.34", required = true)
    private String totalAmount;

    /**
     * 必填：商户授权资金订单号
     * 如： outRequestNo-8077735255938023
     */
    @ApiModelProperty(value = "商户授权资金订单号", example = "outRequestNo-8077735255938023", required = true)
    private String outRequestNo;

    /**
     * 必填：商户本次资金操作的请求流水号
     * 如： 8077735255938032
     */
    @ApiModelProperty(value = "商户本次资金操作的请求流水号", example = "outOrderNo-8077735255938023", required = true)
    private String outOrderNo;

    /**
     * 必填：订单标题
     * 如：XX租车押金
     */
    @ApiModelProperty(value = "订单标题", example = "XX租车押金", required = true)
    private String orderTitle;

    /**
     * 必填：芝麻免押模式
     * 1、后付金额已知: POSTPAY
     * 2、后付金额未知: POSTPAY_UNCERTAIN
     * 3、纯免押: DEPOSIT_ONLY
     * 参考说明：@see <a href="https://opendocs.alipay.com/b/08tf3t?pathHash=d67d7545">...</a>
     */
    @ApiModelProperty(value = "芝麻免押模式", example = "POSTPAY", required = true)
    private String depositProductMode;

    /**
     * 特殊可选：免押模式为 POSTPAY 或 POSTPAY_UNCERTAIN 需要必填
     * 如：详细见 @link{ com.alipay.zmdepositdemo.model.PostPaymentsModel }
     */
    @ApiModelProperty(value = "付费项目", example = "", required = false)
    private PostPaymentsModel postPaymentsModel;

    /**
     * 必填：预授权类目和信用服务ID，
     * 如：{"category":"CHARGE_PILE_CAR","serviceId":"2020042800000000000001450466"}
     */
    @ApiModelProperty(value = "预授权类目和信用服务ID",
            example = "{\"category\":\"CHARGE_PILE_CAR\",\"serviceId\":\"2020042800000000000001450466\"}", required = true)
    private String creditServiceStr;

    /**
     * 可选：商户可用该参数指定支付渠道。 设置无特殊需要请勿传入
     * 如：[{\"payChannelType\":\"PCREDIT_PAY\"},{\"payChannelType\":\"MONEY_FUND\"}]
     */
    @ApiModelProperty(value = "预指定支付渠道", example = "[{\"payChannelType\":\"PCREDIT_PAY\"},{\"payChannelType\":\"MONEY_FUND\"}]",
            required = false)
    private String enablePayChannels;

    /**
     * 可选：买家实名信息,传入后支付宝会比对买家在支付宝端的实名信。 设置无特殊需要请勿传入
     * 如：{\"identity_hash\":\"acc2b92ffc5ed9b472faa19748f10045c30434132784f774b00216a56b8841c6\"}
     */
    @ApiModelProperty(value = "买家实名信息",
            example = "{\"identity_hash\":\"acc2b92ffc5ed9b472faa19748f10045c30434132784f774b00216a56b8841c6\"}", required = false)
    private String identityParams;

    /**
     * 可选：业务参数，如风控参数outRiskInfo等。
     * 如：{\"outRiskInfo\":\"{\"mcCreateTradeTime\":\"2022-03-11
     * 12:46:09\",\"extraAccountCertnoLastSix\":\"000011\",\"mobileOperatingPlatform\":\"ios\",\"sysVersion\":\"15.4.2\",
     * \"mcCreateTradeIp\":\"11.110.111.43\"}\"}
     */
    @ApiModelProperty(value = "业务参数",
            example = "{\"outRiskInfo\":\"{\"mcCreateTradeTime\":\"2022-03-11 12:46:09\",\"extraAccountCertnoLastSix\":\"000011\","
                    + "\"mobileOperatingPlatform\":\"ios\",\"sysVersion\":\"15.4.2\",\"mcCreateTradeIp\":\"11.110.111.43\"}\"}",
            required = false)
    private String businessParams;

    /**
     * 可选：预授权订单相对超时时间。从商户客户端请求时间开始计算。
     * 如：2d
     */
    @ApiModelProperty(value = "预授权订单相对超时时间", example = "2d", required = false)
    private String timeoutExpress;

    /**
     * Getter method for property <tt>productCode</tt>.
     *
     * @return property value of productCode
     */
    public String getProductCode() {
        return productCode;
    }

    /**
     * Setter method for property <tt>productCode</tt>.
     *
     * @param productCode value to be assigned to property productCode
     */
    public void setProductCode(String productCode) {
        this.productCode = productCode;
    }

    /**
     * Getter method for property <tt>totalAmount</tt>.
     *
     * @return property value of totalAmount
     */
    public String getTotalAmount() {
        return totalAmount;
    }

    /**
     * Setter method for property <tt>totalAmount</tt>.
     *
     * @param totalAmount value to be assigned to property totalAmount
     */
    public void setTotalAmount(String totalAmount) {
        this.totalAmount = totalAmount;
    }

    /**
     * Getter method for property <tt>outRequestNo</tt>.
     *
     * @return property value of outRequestNo
     */
    public String getOutRequestNo() {
        return outRequestNo;
    }

    /**
     * Setter method for property <tt>outRequestNo</tt>.
     *
     * @param outRequestNo value to be assigned to property outRequestNo
     */
    public void setOutRequestNo(String outRequestNo) {
        this.outRequestNo = outRequestNo;
    }

    /**
     * Getter method for property <tt>outOrderNo</tt>.
     *
     * @return property value of outOrderNo
     */
    public String getOutOrderNo() {
        return outOrderNo;
    }

    /**
     * Setter method for property <tt>outOrderNo</tt>.
     *
     * @param outOrderNo value to be assigned to property outOrderNo
     */
    public void setOutOrderNo(String outOrderNo) {
        this.outOrderNo = outOrderNo;
    }

    /**
     * Getter method for property <tt>orderTitle</tt>.
     *
     * @return property value of orderTitle
     */
    public String getOrderTitle() {
        return orderTitle;
    }

    /**
     * Setter method for property <tt>orderTitle</tt>.
     *
     * @param orderTitle value to be assigned to property orderTitle
     */
    public void setOrderTitle(String orderTitle) {
        this.orderTitle = orderTitle;
    }

    /**
     * Getter method for property <tt>depositProductMode</tt>.
     *
     * @return property value of depositProductMode
     */
    public String getDepositProductMode() {
        return depositProductMode;
    }

    /**
     * Setter method for property <tt>depositProductMode</tt>.
     *
     * @param depositProductMode value to be assigned to property depositProductMode
     */
    public void setDepositProductMode(String depositProductMode) {
        this.depositProductMode = depositProductMode;
    }

    /**
     * Getter method for property <tt>creditServiceStr</tt>.
     *
     * @return property value of creditServiceStr
     */
    public String getCreditServiceStr() {
        return creditServiceStr;
    }

    /**
     * Setter method for property <tt>creditServiceStr</tt>.
     *
     * @param creditServiceStr value to be assigned to property creditServiceStr
     */
    public void setCreditServiceStr(String creditServiceStr) {
        this.creditServiceStr = creditServiceStr;
    }

    /**
     * Getter method for property <tt>enablePayChannels</tt>.
     *
     * @return property value of enablePayChannels
     */
    public String getEnablePayChannels() {
        return enablePayChannels;
    }

    /**
     * Setter method for property <tt>enablePayChannels</tt>.
     *
     * @param enablePayChannels value to be assigned to property enablePayChannels
     */
    public void setEnablePayChannels(String enablePayChannels) {
        this.enablePayChannels = enablePayChannels;
    }

    /**
     * Getter method for property <tt>identityParams</tt>.
     *
     * @return property value of identityParams
     */
    public String getIdentityParams() {
        return identityParams;
    }

    /**
     * Setter method for property <tt>identityParams</tt>.
     *
     * @param identityParams value to be assigned to property identityParams
     */
    public void setIdentityParams(String identityParams) {
        this.identityParams = identityParams;
    }

    /**
     * Getter method for property <tt>businessParams</tt>.
     *
     * @return property value of businessParams
     */
    public String getBusinessParams() {
        return businessParams;
    }

    /**
     * Setter method for property <tt>businessParams</tt>.
     *
     * @param businessParams value to be assigned to property businessParams
     */
    public void setBusinessParams(String businessParams) {
        this.businessParams = businessParams;
    }

    /**
     * Getter method for property <tt>timeoutExpress</tt>.
     *
     * @return property value of timeoutExpress
     */
    public String getTimeoutExpress() {
        return timeoutExpress;
    }

    /**
     * Setter method for property <tt>timeoutExpress</tt>.
     *
     * @param timeoutExpress value to be assigned to property timeoutExpress
     */
    public void setTimeoutExpress(String timeoutExpress) {
        this.timeoutExpress = timeoutExpress;
    }

    public PostPaymentsModel getPostPaymentsModel() {
        return postPaymentsModel;
    }

    public void setPostPaymentsModel(PostPaymentsModel postPaymentsModel) {
        this.postPaymentsModel = postPaymentsModel;
    }
}
